package com.qf.fronted.service;


import com.qf.commons.Data;
import com.qf.fronted.domain.Order;
import com.qf.fronted.domain.WebOrder;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
import java.util.Map;

public interface IOrderService {

    /**
     * 插入订单信息
     *
     * @param orderNo        订单编号
     * @param price          商品购买价格
     * @param num            购买数量
     * @param orderStatus    订单的状态
     * @param appraiseStatus 评价状态
     * @param userId         订单属于那个用户
     */
    void insertOrder(String orderNo, BigDecimal price, Integer num, String goodsImg, String goodsTitle, Integer orderStatus,
                     Integer appraiseStatus, Integer userId, Integer goodId, Date createTime) throws SQLException;


    //插入订单收货地址
    void insertOrderAddress(String orderNo, Integer defaultTakeDelivertyAddressId) throws SQLException;

    /**
     *  确认订单
     * @param goodsInfo   存储的是用户的商品的id以及商品的购买数量
     * @param defaultTakeDelivertyAddressId  收货地址
     * @param userId  用户id
     * @return
     */
    Data ensureOrder(Map<Integer, Integer> goodsInfo, Integer defaultTakeDelivertyAddressId, Integer userId);


    /**
     *  支付成功之后更新订单状态并创建流水
     * @param tNo  支付宝流水号
     * @param orderNo  订单编号
     * @return
     */
    Data updateOrderStatusAndCreateTag(String tNo, String orderNo,String paymentType);

    /**
     *  根据订单状态和用户id查询订单
     * @param status 订单状态
     * @param userId 用户id
     * @return
     */
    List<WebOrder> getOrdersByStatus(Integer status, Integer userId);

    /**
     *  根据订单编号查询订单
     * @param orderNo 订单编号
     * @return
     */
    List<Order> getOrdersOfOrderNo(String orderNo);

    /**
     * 未提交订单24小时过期，改变订单状态
     * @param orderNo 订单编号
     */
    void changeOrderByOrderNo(String orderNo);

    /**
     *  根据订单编号取消订单,并改变订单状态
     * @param orderNo
     */
    void deleteOrderByOrderNo(String orderNo);




}
